//给你两个正整数 low 和 high 。 
//
// 对于一个由 2 * n 位数字组成的整数 x ，如果其前 n 位数字之和与后 n 位数字之和相等，则认为这个数字是一个对称整数。 
//
// 返回在 [low, high] 范围内的 对称整数的数目 。 
//
// 
//
// 示例 1： 
//
// 
//输入：low = 1, high = 100
//输出：9
//解释：在 1 到 100 范围内共有 9 个对称整数：11、22、33、44、55、66、77、88 和 99 。
// 
//
// 示例 2： 
//
// 
//输入：low = 1200, high = 1230
//输出：4
//解释：在 1200 到 1230 范围内共有 4 个对称整数：1203、1212、1221 和 1230 。
// 
//
// 
//
// 提示： 
//
// 
// 1 <= low <= high <= 10⁴ 
// 
//
// Related Topics 数学 枚举 👍 25 👎 0


package LeetCode.editor.cn;


/**
 * @author ldltd
 * @date 2025-04-11 09:57:27
 * @description 2843.统计对称整数的数目
 
 */
 
public class CountSymmetricIntegers {
    public static void main(String[] args) {
    //测试代码
    CountSymmetricIntegers fun = new CountSymmetricIntegers();
    Solution solution= fun.new Solution();
    
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int countSymmetricIntegers(int low, int high) {
        int res=0;
        for (int i = low; i < high+1; i++) {
            res+=helper(i);
        }
        return res;
    }
    //因为数据范围是 1~10000所以可以直接枚举各个位置
    public int countSymmetricIntegers1(int low, int high) {
        int res = 0;
        for (int a = low; a <= high; ++a) {
            if (a < 100 && a % 11 == 0) {
                res++;
            } else if (1000 <= a && a < 10000) {
                int left = a / 1000 + (a % 1000) / 100;
                int right = (a % 100) / 10 + a % 10;
                if (left == right) {
                    res++;
                }
            }
        }
        return res;
    }

    private int helper(int num) {
        String s = String.valueOf(num);
        if(s.length()%2==0){
            int l=0,r=0;
            int bb = s.length() / 2;
            for (int i = 0; i < bb; i++) {
                l+=s.charAt(i)-'0';
                r+=s.charAt(i+bb)-'0';
            }
            return l==r?1:0;
        }
        return 0;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
